home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cli / FixNI.lha / src / fixni.asm < prev    next >
Assembly Source File  |  2000-10-15  |  7KB  |  287 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    fixni.asm
  3. ;  :Contents.    fix newicons for OS3.5
  4. ;  :Author.    Bert Jahn
  5. ;  :EMail.    wepl@kagi.com
  6. ;  :Address.    Franz-Liszt-Straße 16, Rudolstadt, 07404, Germany
  7. ;  :Version.    $Id: fixni.asm 1.4 2000/10/15 18:58:10 jah Exp jah $
  8. ;  :History.    15.12.99 initial
  9. ;        19.12.99 fix for selected image depth added
  10. ;             fix for different height added
  11. ;        22.12.99 reworked for public release
  12. ;        15.10.00 fix for different width added
  13. ;             prints also infos about the images now
  14. ;  :Requires.    OS V37+
  15. ;  :Copyright.    Public Domain
  16. ;  :Language.    68000 Assembler
  17. ;  :Translator.    Barfly V2.9
  18. ;---------------------------------------------------------------------------*
  19. ;##########################################################################
  20.  
  21.     INCDIR    Includes:
  22.     INCLUDE    lvo/exec.i
  23.     INCLUDE    lvo/dos.i
  24.     INCLUDE    lvo/newicon_lib.i
  25.     INCLUDE    workbench/workbench.i
  26.     
  27.     INCLUDE    macros/ntypes.i
  28.  
  29.     STRUCTURE NewDiskObject,0
  30.         APTR    ndo_StdObject        ;The old-style icon
  31.         APTR    ndo_NormalImage        ;May be NULL, meaning no new style icon
  32.         APTR    ndo_SelectedImage    ;May be NULL, meaning no secondary image
  33.         LABEL    ndo_SIZEOF
  34.  
  35.     ifeq 1
  36.  
  37. struct ChunkyImage
  38. {
  39.     UWORD Width;        /* width of the image. Must be <= 93 */
  40.     UWORD Height;       /* height of the image. Must be <= 93 */
  41.     UWORD NumColors;    /* number of pens defined in the palette. Must be <= 256 */
  42.     UWORD Flags;        /* see defines below */
  43.     UBYTE *Palette;     /* array of RGB components of the pens (one byte per gun) */
  44.     UBYTE *ChunkyData;  /* Width*Height bytes storing the colors of the pixels */
  45. };
  46.  
  47. #define CIF_COLOR_0_TRANSP  (1<<0)  /* color 0 is transparent, not the one */
  48.                                     /* stored in palette */
  49.  
  50. #define CIF_DEFAULT         (1<<1)  /* when this bit is set, the image was */
  51.                                     /* obtained via the DEFAULTIMAGE ToolType, */
  52.                                     /* therefore it is not actually part of the */
  53.                                     /* icon and will not be stored in the */
  54.                                     /* ToolTypes on a PutNewDiskObject(). */
  55.     endc
  56.  
  57. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  58.  
  59. GL    EQUR    A4        ;a4 ptr to Globals
  60. LOC    EQUR    A5        ;a5 for local vars
  61.  
  62.     STRUCTURE    ArgArray,0
  63.         ULONG    aa_input
  64.         LABEL    aa_SIZEOF
  65.  
  66.     NSTRUCTURE    Globals,0
  67.         NAPTR    gl_execbase
  68.         NAPTR    gl_dosbase
  69.         NAPTR    gl_rdargs
  70.         NSTRUCT    gl_rdarray,aa_SIZEOF
  71.         NALIGNLONG
  72.         NLABEL    gl_SIZEOF
  73.  
  74. ;##########################################################################
  75.  
  76.     PURE
  77.     OUTPUT    C:FixNI
  78.     SECTION    "",CODE
  79.  
  80.         bra    .start
  81.         dc.b    "$VER: FixNI 1.4 "
  82.     DOSCMD    "WDate >t:date"
  83.     INCBIN    "t:date"
  84.         dc.b    " by Bert Jahn <wepl@kagi.com>"
  85.         dc.b    " V37+",0
  86.     CNOP 0,2
  87. .start
  88.  
  89. ;##########################################################################
  90.  
  91.         link    GL,#gl_SIZEOF
  92.         move.l    (4).w,(gl_execbase,GL)
  93.  
  94.         move.l    #37,d0
  95.         lea    (_dosname),a1
  96.         move.l    (gl_execbase,GL),a6
  97.         jsr    _LVOOpenLibrary(a6)
  98.         move.l    d0,(gl_dosbase,GL)
  99.         beq    .nodoslib
  100.  
  101.         lea    (_template),a0
  102.         move.l    a0,d1
  103.         lea    (gl_rdarray,GL),a0
  104.         move.l    a0,d2
  105.         moveq    #0,d3
  106.         move.l    (gl_dosbase,GL),a6
  107.         jsr    (_LVOReadArgs,a6)
  108.         move.l    d0,(gl_rdargs,GL)
  109.         bne    .argsok
  110.         lea    (_readargs),a0
  111.         bsr    _PrintErrorDOS
  112.         bra    .noargs
  113. .argsok    
  114.         bsr    _Main
  115. .opend
  116.         move.l    (gl_rdargs,GL),d1
  117.         move.l    (gl_dosbase,GL),a6
  118.         jsr    (_LVOFreeArgs,a6)
  119. .noargs
  120.         move.l    (gl_dosbase,GL),a1
  121.         move.l    (gl_execbase,GL),a6
  122.         jsr    (_LVOCloseLibrary,a6)
  123. .nodoslib
  124.         unlk    GL
  125.         moveq    #0,d0
  126.         rts
  127.  
  128. ;##########################################################################
  129.  
  130. _Main
  131.     ;open newicon.library
  132.         moveq    #39,d0
  133.         lea    (_niname),a1
  134.         move.l    (gl_execbase,GL),a6
  135.         jsr    (_LVOOpenLibrary,a6)
  136.         tst.l    d0
  137.         bne    .niok
  138.         lea    (_nonilib),a0
  139.         bsr    _Print
  140.         bra    .noni
  141. .niok        move.l    d0,a6
  142.  
  143.     ;remove ".info"
  144.         move.l    (gl_rdarray+aa_input,GL),a0
  145.         move.l    a0,a1
  146. .1        tst.b    (a1)+
  147.         bne    .1
  148.         subq.l    #1,a1
  149.         cmp.b    #"o",-(a1)
  150.         bne    .2
  151.         cmp.b    #"f",-(a1)
  152.         bne    .2
  153.         cmp.b    #"n",-(a1)
  154.         bne    .2
  155.         cmp.b    #"i",-(a1)
  156.         bne    .2
  157.         cmp.b    #".",-(a1)
  158.         bne    .2
  159.         clr.b    (a1)
  160. .2
  161.     ;load icon
  162.         jsr    (_LVOGetNewDiskObject,a6)
  163.         tst.l    d0
  164.         bne    .iconok
  165.         lea    (_loadicon),a0
  166.         bsr    _PrintErrorDOS
  167.         bra    .noobj
  168. .iconok
  169.         move.l    d0,a3            ;a3 = ndo
  170.         
  171.     ;print info
  172.     ;    lea    (_ndo),a0
  173.     ;    move.l    a3,a1
  174.     ;    bsr    _PrintArgs
  175.  
  176.     ;check & fix depth for normal image
  177.         tst.l    (ndo_NormalImage,a3)
  178.         beq    .non
  179.         lea    (_normal),a0
  180.         bsr    _Print
  181.         lea    (_image),a0
  182.         move.l    (ndo_NormalImage,a3),a1
  183.         bsr    _PrintArgs
  184.         move.l    (ndo_NormalImage,a3),a1
  185.         cmp.w    #256,(4,a1)
  186.         bls    .non
  187.         move.w    #256,(4,a1)
  188. .non
  189.     ;check & fix depth for selected image
  190.         tst.l    (ndo_SelectedImage,a3)
  191.         beq    .nos
  192.         lea    (_selected),a0
  193.         bsr    _Print
  194.         lea    (_image),a0
  195.         move.l    (ndo_SelectedImage,a3),a1
  196.         bsr    _PrintArgs
  197.         move.l    (ndo_SelectedImage,a3),a2
  198.         cmp.w    #256,(4,a2)
  199.         bls    .nos
  200.         move.w    #256,(4,a2)
  201. .nos
  202.     ;both images present?
  203.         move.l    (ndo_NormalImage,a3),d0
  204.         beq    .nob
  205.         move.l    (ndo_SelectedImage,a3),d1
  206.         beq    .nob
  207.         move.l    d0,a0
  208.         move.l    d1,a1
  209.     ;check & fix different height
  210.         move.w    (2,a0),d0
  211.         cmp.w    (2,a1),d0
  212.         beq    .hok
  213.         move.w    d0,(2,a1)        ;cut selected image at bottom
  214. .hok    ;check & fix different width
  215.         move.w    (a0),d0            ;new width
  216.         cmp.w    (a1),d0
  217.         beq    .wok
  218.         blo    .w0
  219.         exg    a0,a1            ;a1 will be cut
  220. .w0        move.w    (a0),d0            ;d0 = new width
  221.         move.w    (a1),d1            ;d1 = old width
  222.         move.w    (2,a1),d6
  223.         move.w    d0,(a1)            ;set new width
  224.         move.l    (12,a1),a0        ;image data
  225.         move.l    a0,a1
  226.         subq.w    #1,d6
  227. .w2        move.w    d0,d7
  228.         subq.w    #1,d7
  229. .w1        move.b    (a0)+,(a1)+
  230.         dbf    d7,.w1
  231.         add.w    d1,a0
  232.         sub.w    d0,a0
  233.         dbf    d6,.w2
  234. .wok
  235. .nob
  236.     ;write icon back
  237.         move.l    (gl_rdarray+aa_input,GL),a0
  238.         move.l    a3,a1
  239.         jsr    (_LVOPutNewDiskObject,a6)
  240.  
  241.     ;release icon
  242. .4        move.l    a3,a0
  243.         jsr    (_LVOFreeNewDiskObject,a6)
  244.  
  245.     ;release library
  246. .noobj        move.l    a6,a1
  247.         move.l    (gl_execbase,GL),a6
  248.         jsr    (_LVOCloseLibrary,a6)
  249. .noni
  250.         moveq    #20,d0
  251.         rts
  252.  
  253. ;##########################################################################
  254.  
  255.     INCDIR    Sources:
  256.     INCLUDE    dosio.i
  257.         Print
  258.         PrintArgs
  259.     INCLUDE    error.i
  260.         PrintErrorDOS
  261.  
  262. ;##########################################################################
  263.  
  264. ; Operationen
  265. _readargs    dc.b    "read arguments",0
  266. _loadicon    dc.b    "load icon",0
  267.  
  268. _nonilib    dc.b    "need newicon.library version 39",10,0
  269.  
  270. ;subsystems
  271. _dosname    dc.b    "dos.library",0
  272. _niname        dc.b    "new"
  273. _iname        dc.b    "icon.library",0
  274.  
  275. _template    dc.b    "INPUTFILE/A"        ;name eines zu ladenden Files
  276.         dc.b    0
  277.  
  278. ;_ndo        dc.b    "ndo_StdObject=%lx ndo_NormalImage=%lx ndo_SelectedImage=%lx",10,0
  279. _image        dc.b    " Width=%-4dHeight=%-4dNumColor=%-4dFlags=%d Palette=%lx Data=%lx",10,0
  280. _normal        dc.b    "NormalImage  ",0
  281. _selected    dc.b    "SelectedImage",0
  282.  
  283. ;##########################################################################
  284.  
  285.     END
  286.  
  287.